package pandora.box.objeto;

import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import persistence.HibernateUtil;

public class ObjetoDAOImp implements ObjetoDAO {
	private Session 	session 		= null;
	private Transaction transaction 	= null;
	
	public void setSessao(Session session){
		this.session = session;
	}
	
	@Override
	public boolean inserirObjeto(Objeto objeto) {
		boolean retorno = false;
		try {
			session = HibernateUtil.getSessionFactory().openSession();
			transaction = session.beginTransaction();
			objeto.setDtinclusao(new Date());
			objeto.setUsuarioinclusao("ROOT");	//alterar para usuario logado
			objeto.setBolativo('S');
			System.out.print("DAO - nomeobjeto: "+objeto.getNomecampos());
			session.persist(objeto);
			transaction.commit();
			retorno = true;
		} catch (Exception e) {
			transaction.rollback();
			e.printStackTrace();
		}finally{
			session.close();
		}
		return retorno;
	}

	@Override
	public boolean alterarObjeto(Objeto objeto) {
		boolean retorno = false;
		try {
			session = HibernateUtil.getSessionFactory().openSession();
			transaction = session.beginTransaction();
			session.update(objeto);
			transaction.commit();
			retorno = true;
		} catch (Exception e) {
			transaction.rollback();
			e.printStackTrace();
		}finally{
			session.close();
		}
		return retorno;
	}

	@Override
	public boolean excluirObjeto(Objeto objeto) {
		boolean retorno = false;
		try {
			session = HibernateUtil.getSessionFactory().openSession();
			transaction = session.beginTransaction();
			session.delete(session.get(Objeto.class, objeto.getIdobjeto()));
			transaction.commit();
			retorno = true;
		} catch (Exception e) {
			transaction.rollback();
			e.printStackTrace();
		}finally{
			session.close();
		}
		return retorno;
	}

	@Override
	public Objeto listaObjeto(Objeto objeto) {
		Objeto o = null;
		try {
			session = HibernateUtil.getSessionFactory().openSession();
			o = (Objeto) session.get(Objeto.class, objeto.getIdobjeto());
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			session.close();
		}		
		return o;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Objeto> listaTObjetos() {
		List<Objeto> list = null;
		try {
			session = HibernateUtil.getSessionFactory().openSession();
			list = session.createQuery("select * from OBJETO;").list();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			session.close();
		}
		return list;
	}

}
